﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace hercules.Models
{
    public class ProdutoModel
    {
        [DisplayName("Id Produto")]
        public Int32 IdProduto { get; set; }

        [Required]
        [DisplayName("Código de Barra")]
        public Int32 CodigoBarra { get; set; }

        [DisplayName("Natureza CFOP")]
        public Int32 NaturezaCFOP { get; set; }

        [Required]
        [DisplayName("Nome")]
        public string Nome { get; set; }

        [DisplayName("Apelido")]
        public string Apelido { get; set; }

        [DisplayName("NCM")]
        public Int32 Ncm { get; set; }

        [DisplayName("Preço da Nota")]
        public decimal PrecoNota { get; set; }

        [DisplayName("Preço Real")]
        public decimal PrecoReal { get; set; }

        [DisplayName("IPI")]
        public Int32 Ipi { get; set; }

        [DisplayName("Unidade")]
        public string Unidade { get; set; }

        [DisplayName("ICMS")]
        public Int32 Icms { get; set; }

        [DisplayName("Preço da Venda")]
        public decimal PrecoVenda { get; set; }

        [DisplayName("Desconto Máximo")]
        public Int32 DescontoMaximo { get; set; }

        [DisplayName("Data Vencimento")]
        public DateTime DataVencimento { get; set; }

        [DisplayName("Lote")]
        public Int32 Lote { get; set; }


        public Produto ProdutoModelToProduto(ProdutoModel produtoModel)
        {
            Produto produto = new Produto();
            produto.idProduto = produtoModel.IdProduto;
            produto.codigoBarra = produtoModel.CodigoBarra;
            produto.naturezaCFOP = produtoModel.NaturezaCFOP;
            produto.nome = produtoModel.Nome;
            produto.apelido = produtoModel.Apelido;
            produto.ncm = produtoModel.Ncm;
            produto.precoNota = produtoModel.PrecoNota;
            produto.precoReal = produtoModel.PrecoReal;
            produto.ipi = produtoModel.Ipi;
            produto.unidade = produtoModel.Unidade;
            produto.icms = produtoModel.Icms;
            produto.precoVenda = produtoModel.PrecoVenda;
            produto.descontoMaximo = produtoModel.DescontoMaximo;
            produto.dataVencimento = produtoModel.DataVencimento;
            produto.lote = produtoModel.Lote;

            return produto;
        }

        public ProdutoModel ProdutoToProdutoModel(Produto produto)
        {
            ProdutoModel produtoModel = new ProdutoModel();
            produtoModel.IdProduto = produto.idProduto;
            produtoModel.CodigoBarra = produto.codigoBarra;
            produtoModel.Nome = produto.nome;
            produtoModel.Apelido = produto.apelido;
            produtoModel.Unidade = produto.unidade;

            if (produto.naturezaCFOP != null) produtoModel.NaturezaCFOP = (int) produto.naturezaCFOP;
            if (produto.ncm != null) produtoModel.Ncm = (int) produto.ncm;
            if (produto.precoNota != null) produtoModel.PrecoNota = (decimal) produto.precoNota;
            if (produto.precoReal != null) produtoModel.PrecoReal = (decimal) produto.precoReal;
            if (produto.ipi != null) produtoModel.Ipi = (int) produto.ipi;
            if (produto.icms != null) produtoModel.Icms = (int) produto.icms;
            if (produto.precoVenda != null) produtoModel.PrecoVenda = (decimal) produto.precoVenda;
            if (produto.descontoMaximo != null) produtoModel.DescontoMaximo = (int) produto.descontoMaximo;
            if (produto.dataVencimento != null) produtoModel.DataVencimento = (DateTime) produto.dataVencimento;
            if (produto.lote != null) produtoModel.Lote = (int) produto.lote;

            return produtoModel;
        }

        public List<ProdutoModel> ListProdutoToListProdutoModel(List<Produto> produtos)
        {
            return produtos.Select(ProdutoToProdutoModel).ToList();
        }
    }
}